/* 
 * 路由对象
 * 中心思想：需要路由鉴权,由于uni-app没有vue中的全局钩子函数，所以封装了Router对象。
 * 说明：应用中的路由跳转尽量使用该Router的方法，并配合config中的路由表对象进行跳转。
 * 
 * 示例：this.$mRouter.push({route:this.$mRoutesConfig.main,query:{a:1}})
 * 
 */
let timer;
class Router {
	constructor(arg) {
		this.navigateFlag = false
		this.callBack = () => {};
	}

	beforeEach(callBack) {
		if (callBack instanceof Function) this.callBack = callBack;
	}

	push(to) {
		if (this.navigateFlag) {
			return;
		}
		this.navigateFlag = true;
		this.callBack("navigateTo", to);
		if(timer) {
			clearTimeout(timer)
		}
		timer = setTimeout(() => {
			this.navigateFlag = false;
		}, 200);
		
	}

	redirectTo(to) {
		this.callBack("redirectTo", to);
	}

	reLaunch(to) {
		this.callBack("reLaunch", to);
	}

	switchTab(to) {
		this.callBack("switchTab", to);
	}

	back(delta=1) {
		uni.navigateBack({
			delta,
			fail: function(e) {
				uni.redirectTo({
				    url: '/pages/app/index'
				});
			}
		});
	}
}


export default new Router();
